home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMICUS / AMICUS25.ADF / Snow / Flakes (.txt) < prev    next >
AmigaBASIC Source Code  |  1989-01-26  |  3KB  |  116 lines

  1. SCREEN 1,320,200,4,1:DEFINT A-Z:DIM CELL(89,89)
  2. WINDOW 2,"Amiga Snowflakes",,20,1
  3. MENU 1,0,1,"CONTROLS"
  4. MENU 1,4,1,"INITIALIZE":MENU 1,5,1,"CHANGE SIZE"
  5. MENU 1,6,1,"LOAD":MENU 1,7,1,"SAVE":MENU 1,8,1,"QUIT"
  6. ON MENU GOSUB MENUINT
  7. MENU ON
  8. SIZE=64
  9.  
  10. NEWSIZE:
  11.     SIZE1=SIZE+1
  12.  
  13. INITIALIZE:
  14.     CLS:MENU 1,1,1,"START":MENU 1,2,1,"":MENU 1,3,1,"STEP"
  15.     LOCATE 1,26:PRINT"SIZE:":LOCATE 2,26:PRINT SIZE:LOCATE 4,26
  16.     PRINT"GENERATION:":LOCATE 7,26:PRINT"POPULATION:"
  17.     H=SIZE/2:GENERATION=0
  18.     FOR X=1 TO H
  19.         FOR Y=X TO 1 STEP-1
  20.             CELL(X,Y)=0
  21.             CELL(X,X)=7
  22.         NEXT
  23.     NEXT
  24.     RUNMODE=0
  25.     
  26. MAINLOOP:
  27.     LINE (0,0)-(SIZE+2,SIZE+2),2,BF
  28.     LOCATE 5,26:PRINT GENERATION;"    ";
  29.     POPULATION=-128
  30.     FOR X=1 TO H
  31.         FOR Y=X TO 1 STEP-1
  32.             STORE=0:C=CELL(X,Y)
  33.             IF X <> Y AND (C < 5 OR C > 7) GOTO STORECELL
  34.             STORE=1:COLOR RND*12+3:POPULATION=POPULATION+8
  35.             PSET(X,Y):PSET(SIZE1-X,Y):PSET(X,SIZE1-Y):PSET(SIZE1-X,SIZE1-Y)
  36.             PSET(Y,X):PSET(SIZE1-Y,X):PSET(Y,SIZE1-X):PSET(SIZE1-Y,SIZE1-X)
  37.             STORECELL:
  38.                 CELL(X,Y)=STORE
  39.         NEXT Y
  40.     NEXT X
  41.     COLOR 1:LOCATE 8,26:PRINT POPULATION;"    ";
  42.     
  43. CHECKMENU:
  44.     COLOR 1:IF MENUHIT = 1 GOTO EXECUTE        
  45.     IF RUNMODE=0 GOTO CHECKMENU
  46.     
  47. GENERATE:
  48.     COLOR 1:GENERATION=GENERATION+1
  49.     FOR X=1 TO H
  50.         FOR Y=X TO 1 STEP-1
  51.             IF (CELL(X,Y) AND 1) = 0 GOTO DEADCELL
  52.             CELL(X-1,Y-1)=CELL(X-1,Y-1)+2:CELL(X,Y-1)=CELL(X,Y-1)+2
  53.             CELL(X+1,Y-1)=CELL(X+1,Y-1)+2:CELL(X-1,Y)=CELL(X-1,Y)+2
  54.             CELL(X+1,Y)=CELL(X+1,Y)+2:CELL(X-1,Y+1)=CELL(X-1,Y+1)+2
  55.             CELL(X,Y+1)=CELL(X,Y+1)+2:CELL(X+1,Y+1)=CELL(X+1,Y+1)+2
  56.             IF X=H THEN CELL(X,Y-1)=CELL(X,Y-1)+2:CELL(X,Y)=CELL(X,Y)+2:CELL(X,Y+1)=CELL(X,Y+1)+2
  57.         DEADCELL:
  58.         NEXT Y
  59.     NEXT X
  60.     FOR X=2 TO H-1
  61.         IF (CELL(X,X-1) AND 1) <> 0 THEN CELL(X,X-1)=CELL(X,X-1)+2
  62.     NEXT X
  63.     FOR X= 1 TO H
  64.         CELL(0,X)=0:CELL(X-1,X+1)=0:CELL(X,0)=0
  65.     NEXT X
  66.     GOTO MAINLOOP
  67.     
  68. EXECUTE:
  69.     MENUHIT=0
  70.     ON MENUCAT GOTO STARTMODE,STOPMODE,GENERATE,INITIALIZE,CHANGESIZE,LOADER,SAVER,QUIT
  71.     
  72.     STARTMODE:
  73.         RUNMODE=1
  74.         MENU 1,1,1,"RUNNING":MENU 1,2,1,"STOP":MENU 1,3,1,""
  75.         GOTO GENERATE
  76.     
  77.     STOPMODE:
  78.         RUNMODE=0
  79.         MENU 1,1,1,"START":MENU 1,2,1,"":MENU 1,3,1,"STEP"
  80.         GOTO CHECKMENU
  81.         
  82.     QUIT:
  83.         SYSTEM
  84.     
  85.     CHANGESIZE:
  86.         CLS:PRINT"INPUT THE NEW LENGTH/WIDTH OF"
  87.         PRINT"CELL ARRAY.  USE ONLY EVEN NUMBERS."
  88.         INPUT SIZE:SIZE=SIZE AND 254:IF SIZE > 176 GOTO CHANGESIZE
  89.         GOTO NEWSIZE
  90.         
  91.     LOADER:
  92.         LOCATE 22,1:INPUT"FILE NAME ";A$
  93.         OPEN"I",1,A$:INPUT#1,SIZE,GENERATION:H=SIZE/2:SIZE1=SIZE+1
  94.         FOR X=1 TO H
  95.             FOR Y=X TO 1 STEP-1
  96.                 INPUT#1,CELL(X,Y):IF CELL(X,Y)=1 THEN CELL(X,Y)=7
  97.             NEXT Y
  98.         NEXT X
  99.         LINE (0,0)-(178,178),0,BF:LOCATE 2,26:PRINT SIZE
  100.         CLOSE:LOCATE 22,1:PRINT STRING$(40,32)
  101.         RUNMODE=0:MENU 1,1,1,"START":MENU 1,2,1,"":MENU 1,3,1,"STEP"
  102.         GOTO MAINLOOP
  103.             
  104.     SAVER:
  105.         LOCATE 19,1:INPUT"FILE NAME ";A$
  106.         OPEN"O",1,A$:PRINT#1,SIZE,GENERATION
  107.         FOR X=1 TO H
  108.             FOR Y=X TO 1 STEP-1
  109.                 PRINT#1,CELL(X,Y)
  110.             NEXT Y
  111.         NEXT X
  112.         CLOSE:LOCATE 19,1:PRINT STRING$(40,32):GOTO GENERATE
  113.  
  114. MENUINT:
  115.     MENUHIT=MENU(0):MENUCAT=MENU(1):RETURN
  116.